package com.prsistema.Estoque;

import com.prsistema.utilitarias.Produto;
import com.prsistema.DAO.Conexao;
import com.prsistema.DAO.DAOProduto;
import com.prsistema.Estaticos.MetodosStaticos;
import java.awt.Color;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

public class VisualizarEstoque extends javax.swing.JPanel {

    private ArrayList<Produto> listaProdutos = new ArrayList<Produto>();
    private DAOProduto daoProduto;
    private final String urlBtnIcon = "/com/prsistema/ImagensIcones/";
    private final String urlLabelIcon = "/com/prsistema/ImagensIcones/labels/";
    //Variáveis que determinam as ações dos botões novo, atualiza
    //que quando acionados mudam os valores desses booleanos e executam os comando salvar e cancelar
    private boolean novo;
    private boolean salvar;
    private boolean cancelar;

    /** Creates new form VisualizarEstoque */
    public VisualizarEstoque(Conexao con) {
        this.daoProduto = new DAOProduto(con.getConector());
        this.listaProdutos = this.daoProduto.selectAll();
        //Inicializando para que os botões começem com a função de novo e atualizar
        this.novo = true;
        this.salvar = false;
        this.cancelar = false;
        initComponents();
        this.carregarDados();
    }

    private void carregarDados() {
        this.listaProdutos = this.daoProduto.selectAll();
        this.preencheCampos();
    }

    private void preencheCampos() {
        this.listagemProdutos.removeAll();
        for (int i = 0; i < this.listaProdutos.size(); i++) {
            listagemProdutos.add(listaProdutos.get(i).getNome());
        }
    }

    //Método chamado quando outro produto é selecionado na lista ou selecionado pelos botões de controle
    //mostrando na telas todas as informações do produto selecionado
    private void mudaPosicao(int index) {
        Produto prod = this.listaProdutos.get(index);

        this.txtCodigo.setText(String.valueOf(prod.getId()));
        this.txtNome.setText(prod.getNome());
        this.txtPesoSaco.setText(String.valueOf(prod.getPesoSaco()) + " kg");
        this.txtPesoUnidade.setText(String.valueOf(prod.getPesoUnidade()) + " g");
        this.txtPrecoCompra.setText("R$ " + String.valueOf(prod.getPrecoCompra()));
        this.txtPrecoVenda.setText("R$ " + String.valueOf(prod.getPrecoVenda()));
        this.txtUniEstoque.setText(String.valueOf(prod.getUniEstoque()) + " pacotes");
        this.txtUniVendido.setText(String.valueOf(prod.getUniVendido()) + " pacotes");
        this.txtInfoAdd.setText(prod.getInfoAdd());

        this.btnAtualizar.setEnabled(true);
        this.btnDeletar.setEnabled(true);
    }

    private void limpaCampos() {
        //Deixa todos os campos em branco
        this.txtCodigo.setText("");
        this.txtNome.setText("");
        this.txtPesoSaco.setText("");
        this.txtPesoUnidade.setText("");
        this.txtPrecoCompra.setText("");
        this.txtPrecoVenda.setText("");
        this.txtUniEstoque.setText("");
        this.txtUniVendido.setText("");
        this.txtInfoAdd.setText("");
    }

    private void abilitaCampos(boolean abilita) {
        //Desabilita campos de texto
        this.txtNome.setEditable(abilita);
        this.txtPesoSaco.setEditable(abilita);
        this.txtPesoUnidade.setEditable(abilita);
        this.txtPrecoCompra.setEditable(abilita);
        this.txtPrecoVenda.setEditable(abilita);
        this.txtUniEstoque.setEditable(abilita);
        this.txtUniVendido.setEditable(abilita);
        this.txtInfoAdd.setEditable(abilita);
    }

    private void cancelar() {
        this.limpaCampos();

        //Abilita botões 
        this.btnAnterior.setEnabled(true);
        this.btnProximo.setEnabled(true);
        this.listagemProdutos.setEnabled(true);
        this.btnAtualizar.setEnabled(false);

        this.abilitaCampos(false);

        //Muda status de salvar para novo
        MetodosStaticos.mudaJbutton(this.btnNovo, "Novo", new ImageIcon(getClass().getResource(this.urlBtnIcon + "btnAdicionar.png")));
        MetodosStaticos.mudaJbutton(this.btnNovo, "Atualizar", new ImageIcon(getClass().getResource(this.urlBtnIcon + "btnAtualizar1.png")));

        this.carregarDados();
    }

    private boolean salvar() {
        boolean retorno = false;

        try {
            Produto prod = new Produto(); //Produto que está sendo cadastrado

            //Passando as informações dos campos preenchidos para o objeto prod
            prod.setNome(this.txtNome.getText());
            prod.setPesoSaco(Float.parseFloat(this.txtPesoSaco.getText()));
            prod.setPesoUnidade(Float.parseFloat(this.txtPesoUnidade.getText()));
            prod.setPrecoCompra(Float.parseFloat(this.txtPrecoCompra.getText()));
            prod.setPrecoVenda(Float.parseFloat(this.txtPrecoVenda.getText()));
            prod.setUniEstoque(Long.parseLong(this.txtUniEstoque.getText()));
            prod.setUniVendido(Long.parseLong(this.txtUniVendido.getText()));
            prod.setInfoAdd(this.txtInfoAdd.getText());

            //É neste if que devem ser feitas as comparações para que os campos obrigatórios não estejam vazios
            if ("".equals(prod.getNome())) {
                MetodosStaticos.mudaJlabel(this.lblStatus, "Preencha os campos obrigatórios", Color.red,
                        new ImageIcon(getClass().getResource(this.urlLabelIcon + "lblErro.png")));
            } else {
                Produto pd = this.daoProduto.select(prod.getNome()); //Produto que vem do banco, usado pra verificar se o novo produto ja existe

                //Este if verifica qual é a ação do botão no momento, cadastrar ou atualizar
                if (this.novo) {
                    if (prod.getNome().equals(pd.getNome())) {
                        MetodosStaticos.mudaJlabel(this.lblStatus, "Já existe um produto cadastrado com esse nome", Color.red,
                                new ImageIcon(getClass().getResource(this.urlLabelIcon + "lblErro.png")));
                    } else {
                        if (this.daoProduto.insert(prod)) {
                             MetodosStaticos.mudaJlabel(this.lblStatus, "Produto cadastrado com sucesso", Color.red, 
                                new ImageIcon(getClass().getResource(this.urlLabelIcon + "lblConfirma.png")));
                            retorno = true;
                            this.cancelar();
                        }
                    }
                } else {
                    prod.setId(Integer.parseInt(this.txtCodigo.getText()));
                    if (prod.getNome().equals(pd.getNome())
                            && !prod.getNome().equals(this.listaProdutos.get(this.listagemProdutos.getSelectedIndex()).getNome())) {
                        JOptionPane.showMessageDialog(null, "Já existe um produto cadastrado com esse nome");
                    } else {
                        if (this.daoProduto.update(prod)) {
                            JOptionPane.showMessageDialog(null, "Produto atualizado com sucesso");
                            retorno = true;
                            this.cancelar();
                        }
                    }
                }
            }

            return retorno;
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex);
            return retorno;
        }
    }

    private void novoAtuali() {

        //Comparação que verifica se um produto novo esta sendo cadastrado ou se um ja existente está sendo atualizado
        //Caso esteja sendo atualizado, os campos continuaram preenchidos com as informações do produto selecionado
        //Caso seja para cadastro, todos os campos ficam vazios
        if (this.novo) {
            //Deseleciona item na listagem
            this.listagemProdutos.deselect(this.listagemProdutos.getSelectedIndex());

            this.btnAtualizar.setEnabled(true);

            this.limpaCampos();
        } else {
            //Aqui os campos são adaptados para a atualização das informações
            //assim letras como g(gramas), kg(kilograma) ou palavras como pacotes
            //são retiradas dos campos para evitar erros
            Produto prod = this.listaProdutos.get(this.listagemProdutos.getSelectedIndex());
            this.txtPesoSaco.setText(String.valueOf(prod.getPesoUnidade()));
            this.txtPesoUnidade.setText(String.valueOf(prod.getPesoUnidade()));
            this.txtPrecoCompra.setText(String.valueOf(prod.getPrecoCompra()));
            this.txtPrecoVenda.setText(String.valueOf(prod.getPrecoVenda()));
            this.txtUniEstoque.setText(String.valueOf(prod.getUniEstoque()));
            this.txtUniVendido.setText(String.valueOf(prod.getUniVendido()));
        }

        //desabilitando todos os elementos que não participam do processo de cadastro ou atualização
        this.btnAnterior.setEnabled(false);
        this.btnProximo.setEnabled(false);
        this.btnDeletar.setEnabled(false);
        this.listagemProdutos.setEnabled(false);

        //Abilitando os campos para que o usuário possa informar as informações que deseja
        this.abilitaCampos(true);

        //Muda status de novo para salvar
        this.btnNovo.setText("Salvar");
        this.btnNovo.setIcon(new javax.swing.ImageIcon(getClass().getResource(this.urlBtnIcon + "btnSalvar.png")));
        this.btnAtualizar.setText("Cancelar");
        this.btnAtualizar.setIcon(new javax.swing.ImageIcon(getClass().getResource(this.urlBtnIcon + "btnCancelar.png")));
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        listagemProdutos = new java.awt.List();
        jPanel2 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        txtInfoAdd = new javax.swing.JTextArea();
        txtUniEstoque = new javax.swing.JTextField();
        txtPrecoCompra = new javax.swing.JTextField();
        txtNome = new javax.swing.JTextField();
        txtCodigo = new javax.swing.JTextField();
        jLabel6 = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        txtPesoUnidade = new javax.swing.JTextField();
        txtPesoSaco = new javax.swing.JTextField();
        jLabel8 = new javax.swing.JLabel();
        txtUniVendido = new javax.swing.JTextField();
        jLabel9 = new javax.swing.JLabel();
        txtPrecoVenda = new javax.swing.JTextField();
        jPanel3 = new javax.swing.JPanel();
        btnAnterior = new javax.swing.JButton();
        btnProximo = new javax.swing.JButton();
        btnNovo = new javax.swing.JButton();
        btnAtualizar = new javax.swing.JButton();
        btnDeletar = new javax.swing.JButton();
        lblStatus = new javax.swing.JLabel();

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "PRODUTOS CADASTRADOS", javax.swing.border.TitledBorder.LEFT, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Calibri", 0, 13))); // NOI18N
        jPanel1.setFont(new java.awt.Font("Calibri", 0, 13));
        jPanel1.setPreferredSize(new java.awt.Dimension(240, 460));

        listagemProdutos.setFont(new java.awt.Font("Calibri", 0, 13));
        listagemProdutos.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                listagemProdutosItemStateChanged(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(listagemProdutos, javax.swing.GroupLayout.DEFAULT_SIZE, 208, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addComponent(listagemProdutos, javax.swing.GroupLayout.DEFAULT_SIZE, 404, Short.MAX_VALUE)
                .addContainerGap())
        );

        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "INFORMAÇÕES DO PRODUTO", javax.swing.border.TitledBorder.LEFT, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Calibri", 0, 13))); // NOI18N

        jLabel1.setFont(new java.awt.Font("Calibri", 0, 13));
        jLabel1.setText("Nome");

        jLabel2.setFont(new java.awt.Font("Calibri", 0, 13));
        jLabel2.setText("Peso do pacote (venda)");

        jLabel3.setFont(new java.awt.Font("Calibri", 0, 13));
        jLabel3.setText("Preço de compra / kg");

        jLabel4.setFont(new java.awt.Font("Calibri", 0, 13));
        jLabel4.setText("Unidades em estoque");

        jLabel5.setFont(new java.awt.Font("Calibri", 0, 13));
        jLabel5.setText("Informações Adicionais");

        txtInfoAdd.setColumns(20);
        txtInfoAdd.setEditable(false);
        txtInfoAdd.setRows(5);
        jScrollPane1.setViewportView(txtInfoAdd);

        txtUniEstoque.setEditable(false);
        txtUniEstoque.setFont(new java.awt.Font("Calibri", 0, 13));
        txtUniEstoque.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtUniEstoqueActionPerformed(evt);
            }
        });

        txtPrecoCompra.setEditable(false);
        txtPrecoCompra.setFont(new java.awt.Font("Calibri", 0, 13));
        txtPrecoCompra.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtPrecoCompraActionPerformed(evt);
            }
        });

        txtNome.setEditable(false);
        txtNome.setFont(new java.awt.Font("Calibri", 0, 13));
        txtNome.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtNomeActionPerformed(evt);
            }
        });

        txtCodigo.setEditable(false);
        txtCodigo.setFont(new java.awt.Font("Calibri", 0, 13));
        txtCodigo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtCodigoActionPerformed(evt);
            }
        });

        jLabel6.setFont(new java.awt.Font("Calibri", 0, 13));
        jLabel6.setText("Código");

        jLabel7.setFont(new java.awt.Font("Calibri", 0, 13));
        jLabel7.setText("Peso do pacote (compra)");

        txtPesoUnidade.setEditable(false);
        txtPesoUnidade.setFont(new java.awt.Font("Calibri", 0, 13));
        txtPesoUnidade.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtPesoUnidadeActionPerformed(evt);
            }
        });

        txtPesoSaco.setEditable(false);
        txtPesoSaco.setFont(new java.awt.Font("Calibri", 0, 13));
        txtPesoSaco.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtPesoSacoActionPerformed(evt);
            }
        });

        jLabel8.setFont(new java.awt.Font("Calibri", 0, 13));
        jLabel8.setText("Unidades Vendidas");

        txtUniVendido.setEditable(false);
        txtUniVendido.setFont(new java.awt.Font("Calibri", 0, 13));
        txtUniVendido.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtUniVendidoActionPerformed(evt);
            }
        });

        jLabel9.setFont(new java.awt.Font("Calibri", 0, 13));
        jLabel9.setText("Preço de venda (un)");

        txtPrecoVenda.setEditable(false);
        txtPrecoVenda.setFont(new java.awt.Font("Calibri", 0, 13));
        txtPrecoVenda.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtPrecoVendaActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addComponent(jLabel6)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(txtCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel3)
                            .addComponent(jLabel5)
                            .addComponent(jLabel4)
                            .addComponent(jLabel2)
                            .addComponent(jLabel1))
                        .addGap(10, 10, 10)
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 350, Short.MAX_VALUE)
                            .addGroup(jPanel2Layout.createSequentialGroup()
                                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addComponent(txtPrecoCompra, javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(txtPesoUnidade, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 95, Short.MAX_VALUE)
                                    .addComponent(txtUniEstoque, javax.swing.GroupLayout.Alignment.LEADING))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(jPanel2Layout.createSequentialGroup()
                                        .addComponent(jLabel7)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                        .addComponent(txtPesoSaco, javax.swing.GroupLayout.DEFAULT_SIZE, 99, Short.MAX_VALUE))
                                    .addGroup(jPanel2Layout.createSequentialGroup()
                                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                            .addComponent(jLabel8)
                                            .addComponent(jLabel9))
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                            .addComponent(txtUniVendido, javax.swing.GroupLayout.DEFAULT_SIZE, 133, Short.MAX_VALUE)
                                            .addComponent(txtPrecoVenda, javax.swing.GroupLayout.DEFAULT_SIZE, 133, Short.MAX_VALUE)))))
                            .addComponent(txtNome, javax.swing.GroupLayout.DEFAULT_SIZE, 350, Short.MAX_VALUE))))
                .addContainerGap())
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel6)
                    .addComponent(txtCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(11, 11, 11)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtNome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtPesoUnidade, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel2)
                    .addComponent(jLabel7)
                    .addComponent(txtPesoSaco, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtPrecoCompra, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel3)
                    .addComponent(jLabel9)
                    .addComponent(txtPrecoVenda, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtUniEstoque, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel4)
                    .addComponent(txtUniVendido, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel8))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel5)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "BOTÕES DE CONTROLE", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Calibri", 0, 13))); // NOI18N

        btnAnterior.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/prsistema/ImagensIcones/btnSetaAnterior.png"))); // NOI18N
        btnAnterior.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAnteriorActionPerformed(evt);
            }
        });

        btnProximo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/prsistema/ImagensIcones/btnSetaProximo.png"))); // NOI18N
        btnProximo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnProximoActionPerformed(evt);
            }
        });

        btnNovo.setFont(new java.awt.Font("Calibri", 0, 13));
        btnNovo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/prsistema/ImagensIcones/btnAdicionar.png"))); // NOI18N
        btnNovo.setText("Novo");
        btnNovo.setMaximumSize(new java.awt.Dimension(105, 35));
        btnNovo.setMinimumSize(new java.awt.Dimension(105, 35));
        btnNovo.setPreferredSize(new java.awt.Dimension(105, 37));
        btnNovo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNovoActionPerformed(evt);
            }
        });

        btnAtualizar.setFont(new java.awt.Font("Calibri", 0, 13));
        btnAtualizar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/prsistema/ImagensIcones/btnAtualizar1.png"))); // NOI18N
        btnAtualizar.setText("Atualizar");
        btnAtualizar.setEnabled(false);
        btnAtualizar.setMaximumSize(new java.awt.Dimension(105, 35));
        btnAtualizar.setMinimumSize(new java.awt.Dimension(105, 35));
        btnAtualizar.setPreferredSize(new java.awt.Dimension(105, 37));
        btnAtualizar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAtualizarActionPerformed(evt);
            }
        });

        btnDeletar.setFont(new java.awt.Font("Calibri", 0, 13));
        btnDeletar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/prsistema/ImagensIcones/btnExcluir.png"))); // NOI18N
        btnDeletar.setText("Deletar");
        btnDeletar.setEnabled(false);
        btnDeletar.setMaximumSize(new java.awt.Dimension(105, 35));
        btnDeletar.setMinimumSize(new java.awt.Dimension(105, 35));
        btnDeletar.setPreferredSize(new java.awt.Dimension(105, 37));
        btnDeletar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnDeletarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(btnAnterior, javax.swing.GroupLayout.DEFAULT_SIZE, 70, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnNovo, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnAtualizar, javax.swing.GroupLayout.DEFAULT_SIZE, 115, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnDeletar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(btnProximo, javax.swing.GroupLayout.DEFAULT_SIZE, 70, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(btnProximo, javax.swing.GroupLayout.DEFAULT_SIZE, 39, Short.MAX_VALUE)
                    .addComponent(btnAtualizar, javax.swing.GroupLayout.DEFAULT_SIZE, 39, Short.MAX_VALUE)
                    .addComponent(btnDeletar, javax.swing.GroupLayout.DEFAULT_SIZE, 39, Short.MAX_VALUE)
                    .addComponent(btnAnterior, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(btnNovo, javax.swing.GroupLayout.DEFAULT_SIZE, 39, Short.MAX_VALUE))
                .addContainerGap())
        );

        lblStatus.setFont(new java.awt.Font("Calibri", 0, 13)); // NOI18N
        lblStatus.setText("Staus...");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jPanel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(lblStatus))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 440, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(lblStatus)
                        .addGap(11, 11, 11)
                        .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
    }// </editor-fold>//GEN-END:initComponents

private void txtUniEstoqueActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtUniEstoqueActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_txtUniEstoqueActionPerformed

private void txtPrecoCompraActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtPrecoCompraActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_txtPrecoCompraActionPerformed

private void txtNomeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtNomeActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_txtNomeActionPerformed

private void btnNovoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNovoActionPerformed
    //Comparação para determinar qual método será chamado, novo ou salvar
    if (this.salvar) {
        if (this.salvar()) {
            this.cancelar = false;
            this.salvar = false;
        }
    } else {
        this.salvar = true;
        this.novo = true;
        this.cancelar = true;
        this.novoAtuali();
    }
}//GEN-LAST:event_btnNovoActionPerformed

private void btnAtualizarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAtualizarActionPerformed
    //Comparação para determinar qual método será chamado, atualizar ou cancelar
    if (this.cancelar) {
        this.cancelar();
        this.cancelar = false;
        this.salvar = false;
    } else {
        this.novo = false;
        this.cancelar = true;
        this.salvar = true;
        this.novoAtuali();
    }
}//GEN-LAST:event_btnAtualizarActionPerformed

private void btnDeletarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDeletarActionPerformed
    //Aqui é pedido a confirmação do usuário para a exclusão de algum produto
    int opt = JOptionPane.showConfirmDialog(null, "Deseja mesmo excluir este produto?");

    //Caso o numero retornado seja 0, o usuário deseja mesmo deletar o produto, então tais comandos são executados
    if (opt == 0) {
        Produto prod = this.listaProdutos.get(this.listagemProdutos.getSelectedIndex());
        if (this.daoProduto.delete(prod)) {
            JOptionPane.showMessageDialog(null, "Produto deletado com sucesso");
            this.carregarDados();

            this.btnDeletar.setEnabled(false);
            this.limpaCampos();

        }
    }
}//GEN-LAST:event_btnDeletarActionPerformed

private void txtCodigoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtCodigoActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_txtCodigoActionPerformed

private void txtPesoUnidadeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtPesoUnidadeActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_txtPesoUnidadeActionPerformed

private void txtPesoSacoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtPesoSacoActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_txtPesoSacoActionPerformed

private void txtUniVendidoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtUniVendidoActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_txtUniVendidoActionPerformed

private void listagemProdutosItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_listagemProdutosItemStateChanged
    //Apenas pega o indice escolhido pelo usuário e chama o método mudaPosição
    int index = this.listagemProdutos.getSelectedIndex();
    this.mudaPosicao(index);
}//GEN-LAST:event_listagemProdutosItemStateChanged

private void btnAnteriorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAnteriorActionPerformed
    int index = this.listagemProdutos.getSelectedIndex();

    if (index == -1) {
        this.mudaPosicao(0);
        this.listagemProdutos.select(0);
    } else {
        if (index == 0) {
            this.mudaPosicao(this.listaProdutos.size() - 1);
            this.listagemProdutos.select(this.listaProdutos.size() - 1);
        } else {
            this.mudaPosicao(index - 1);
            this.listagemProdutos.select(index - 1);
        }
    }
}//GEN-LAST:event_btnAnteriorActionPerformed

private void btnProximoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnProximoActionPerformed
    int index = this.listagemProdutos.getSelectedIndex();

    if (index == -1 || index == this.listaProdutos.size() - 1) {
        this.mudaPosicao(0);
        this.listagemProdutos.select(0);
    } else {
        this.mudaPosicao(index + 1);
        this.listagemProdutos.select(index + 1);
    }
}//GEN-LAST:event_btnProximoActionPerformed

private void txtPrecoVendaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtPrecoVendaActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_txtPrecoVendaActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAnterior;
    private javax.swing.JButton btnAtualizar;
    private javax.swing.JButton btnDeletar;
    private javax.swing.JButton btnNovo;
    private javax.swing.JButton btnProximo;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lblStatus;
    private java.awt.List listagemProdutos;
    private javax.swing.JTextField txtCodigo;
    private javax.swing.JTextArea txtInfoAdd;
    private javax.swing.JTextField txtNome;
    private javax.swing.JTextField txtPesoSaco;
    private javax.swing.JTextField txtPesoUnidade;
    private javax.swing.JTextField txtPrecoCompra;
    private javax.swing.JTextField txtPrecoVenda;
    private javax.swing.JTextField txtUniEstoque;
    private javax.swing.JTextField txtUniVendido;
    // End of variables declaration//GEN-END:variables
}
